package com.example.jsd2205.vx.emos.common.util;

import org.apache.http.HttpStatus;

import java.util.HashMap;
import java.util.Map;

/**
 * javaWeb项目需要统一数据的返回格式, 业务状态码,业务消息,业务数据
 * 所以添加封装的R对象
 * @author admin闫
 */
public class R extends HashMap<String, Object> {

    /**
     * 无参构造器:默认绑定的一些数据
     */
    public R(){
        put("code", HttpStatus.SC_OK);//添加封装好的状态码
        put("msg","success");
    }

    /**
     * 重载的ok方法
     * 定义静态工厂方法 方法作用:在使用R对象时,请求成功就调用R对象的工厂方法ok
     * 可以指定业务消息,与包含的状态码,如果请求失败就调用error可以返回自定义类型的异常消息
     * @return R 连续调用
     */
    public static R ok(){
        return new R();
    }

    /**
     * 存入消息后返回对象 重载的ok方法
     * @param msg
     * @return
     */
    public static R ok(String msg){
        R r=new R();
        r.put("msg",msg);
        return r;
    }

    /**
     * 把Map数据封装到R中返回 重载的ok方法
     * @param map
     * @return R 对象
     */
    public static R ok(Map<String,Object> map){
        R r=new R();
        r.putAll(map);
        return r;
    }

    /**
     * 静态工厂 error 方法
     * @param code 状态码
     * @param msg
     * @return
     */
    public static R error(int code,String msg){ //为什么传入状态码:在请求失败时返回
        R r=new R();
        r.put("code",code);
        r.put("msg",msg);
        return r;
    }

    /**
     * 重载的 一个参数 error方法
     * @param msg
     * @return error
     */
    public static R error(String msg){
        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR,msg);
    }

    /**
     * 重载的 无参 error方法
     * @return error
     */
    public static R error(){
        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR,"未知异常,请联系小闫!!");
    }

    /**
     * 工厂put方法
     * 手动绑定一些其他数据,并重新声明一个put方法,(原因)现有的put方法没有办法形成链式调用
     * @param key key with which the specified value is to be associated
     * @param value value to be associated with the specified key
     * @return this R 对象
     */
    public R put(String key,Object value){
        super.put(key,value);
        return this;
    }


}
